//util.hpp是我们的工具库
#pragma once

#include <iostream>
#include <string>
#include <fstream>
#include <boost/algorithm/string.hpp>
#include "cppjieba/Jieba.hpp"

namespace my_util{
    //FileUtil是我们的文件工具
    class FileUtil
    {
        public:
        //ReadFile将file_path路径所在的文件中的信息，写入到out中
        static bool ReadFile(const std::string& file_path,std::string* out)
        {
            // 打开文件in，方式为in写入
            std::ifstream in(file_path,std::ios::in);
            if(!in.is_open()) //如果文件没有打开，直接输出错误
            {
                std::cerr<<"open file "<<file_path<<" error"<<std::endl;
                return false;
            }

            std::string line; //将文件中的内容读入line，再追加到out中
            while(std::getline(in,line))
            {
                *out+=line;
            }

            in.close(); //关闭文件
            return true;
        }
    };

    //StringUtil是我们的字符串处理工具 
    class StringUtil
    {
        public:
        //字符串切分函数，用来实现将file字符串以\3进行切分，且存储在result中
        static bool SplitString(const std::string& file,std::vector<std::string> *result,std::string sep)
        {
            //我们直接使用boost库中的字符串切分函数进行切分
            boost::split(*result,file,boost::is_any_of(sep),boost::token_compress_on);
        }
    };

    const char* const DICT_PATH = "./dict/jieba.dict.utf8";
    const char* const HMM_PATH = "./dict/hmm_model.utf8";
    const char* const USER_DICT_PATH = "./dict/user.dict.utf8";
    const char* const IDF_PATH = "./dict/idf.utf8";
    const char* const STOP_WORD_PATH = "./dict/stop_words.utf8";
    //JiebaUtil是我们的jieba工具
    class JiebaUtil
    {
        private:
            //定义静态成员变量jieba 
            static cppjieba::Jieba jieba;
        
        public:
            //我们根据jieba函数来完成我们的分词功能
            static void CutString(const std::string &src,std::vector<std::string> *dest)
            {
                jieba.CutForSearch(src,*dest);
            }
    };

    //初始化静态成员变量jieba 
    cppjieba::Jieba JiebaUtil::jieba(DICT_PATH,HMM_PATH,USER_DICT_PATH,IDF_PATH,STOP_WORD_PATH); 
}